This file creates the ML models necessary to simulate the operation of a buildings HVAC system.

Overall Data Flow

Here we initialize libraries and read in the data.

# Constant Chunk 

# initVer <- function(){
#   ver <- list()
#   ver$number <- 0.32
#   ver$string <- sprintf("Version %.2f",ver$number)
#   ver$starttime <- Sys.time()
#   ver$startfmttime <- sprintf(format(ver$starttime, "%d %b %Y - %H:%M:%S"))
#   return(ver)
# }

#bld_ <- "REDW B"
#bld_ <- "REDW A"
#bld_ <- "B99"
#bld_ <- "WILLOWS 10525"
bld_ <- "City Center"


library(randomForest,quietly=T,warn.conflicts=F)
## randomForest 4.6-12
## Type rfNews() to see new features/changes/bug fixes.
library(lubridate,quietly=T,warn.conflicts=F)
library(ggplot2,quietly=T,warn.conflicts=F)
library(reshape2,quietly=T,warn.conflicts=F)
library(dplyr,quietly=T,warn.conflicts=F)
library(scales,quietly=T,warn.conflicts=F)
library(knitr,quietly=T,warn.conflicts=F)
library(gridExtra,quietly=T,warn.conflicts=F)
library(reaferg)

ver <- initVer()
print(sprintf("%s created on %s",ver$string,ver$startfmttime))
## [1] "Version 0.32 created on 22 Jan 2016 - 23:51:35"
#knit_hooks$set(webgl = hook_webgl)

# xx <- sort(rnorm(1000))
# yy <- rnorm(1000)
# zz <- rnorm(1000) + atan2(xx,yy)
# plot3d(xx, yy, zz, col=rainbow(1000))

# getErgPaths <- function(bpath="../5-prescriptive/"){
#   path <- list()
#   path$graph <- paste0(bpath,"graphs")
#   path$qdata <- paste0(bpath,"qdata")
#   # these later paths appear unused?
#   path$data <- paste0(bpath,"data")
#   path$tdata <- paste0(bpath,"tdata")
#   path$runparm <- paste0(bpath,"rundata")
#   path$wdata <- paste0(bpath,"wdata")
#   return(path)
# }

# getRparms <- function(blld,rseed=1234){
#   rparms <- list()
#   rparms$bld <- blld
#   rparms$bchtime <- "---bchtime---"
#   rparms$runname <- "devel"
#   rparms$gwidth <- 12
#   rparms$gheight <- 9
#   rparms$randomseed <- rseed
#   set.seed(rseed)
#   
#   rparms$trainfrac <- 0.93
#   rparms$rfntree <- 70
#   
#   rparms$ergname <- "e.tot"
#   
#   rparms$noiselev <- 9
#   
#   rparms$usagecostkwh <- (0.06209+0.016377)
#   rparms$demandcostkw <- 3.78
#   
#   rparms$tzab <- "US/Pacific"
#   rparms$pltstime <- ymd_hms("2013-01-01 00:00:00",tz=rparms$tzab)
#   rparms$stime <- ymd_hms("2014-01-01 00:00:00",tz=rparms$tzab)
#   rparms$stime <- ymd_hms("2014-10-01 00:00:00",tz=rparms$tzab)
#   rparms$etime <- ymd_hms("2014-12-03 23:45:00",tz=rparms$tzab)
#   
#   rparms$sitime <- rparms$stime
#   rparms$eitime <- rparms$etime
#   rparms$sitime <- ymd_hms("2014-11-18 00:00:00",tz=rparms$tzab)
#   rparms$eitime <- ymd_hms("2014-11-18 23:45:00",tz=rparms$tzab)
#   
#   rparms$hvaclevs <- c("heating","drift","cooling")
#   rparms$hvaccolors <- c("red","green","blue")
#   
#   # shiny specific
#   rparms$trainingInvalid <- T
#   rparms$traincount <- 0
#   rparms$predictcount <- 0
#   rparms$nchg <- 0
#   
#   rparms$dispvar <- "occ"
#   rparms$ergvar <- "e.tot"
#   
#   return(rparms)
# }

# getFeatures <- function(){
#   feats <- list()
#   feats$time <- c("time","year","ydayf","hourf","wday","holi")
#   feats$bld <- c("hdcnt")
#   feats$wetr <- c("temp.f","tcool.f","theat.f","dewp.f","pres.pa","wind.deg","wind.kmh","hum.pc","rain.mm")
#   feats$pred <- c("occ")
#   feats$dwetr <- c("tcool.f","theat.f","dewp.f","pres.pa","wind.deg","wind.kmh","hum.pc","rain.mm")
#   return(feats)
# }

epath <- getErgPaths()
rparms <- getRparms(bld_)
parms <- data.frame(ver$starttime)
feats <- getFeatures()

Graphics function definitions

# Plot Function Chunk

# mwk <- function(x){
#   rv <- (x+6)%%7
#   rv <- ifelse(rv==0,7,rv)
#   return(rv)
# }

# r2print <- function(titwrd,y,predy,nrt,npr){
#   if (is.factor(y)){
#     y <- as.numeric(as.character(y))
#   }
#   if (is.factor(predy)){
#     predy <- as.numeric(as.character(predy))
#   }
#   meany <- mean(y,na.rm=T)
#   res <- y-predy
#   ssres <- sum(res*res,na.rm=T)
#   sstot <- sum((y-meany)*(y-meany),na.rm=T)
#   
#   r2test <- 1 - (ssres/sstot)
#   adjrat <- (nrt-1)/(nrt-npr-1)
#   print(sprintf("%s regressors:%d  predictors:%d   adjrat:%.5f",titwrd,nrt,npr,adjrat))
#   print(sprintf("   SSres:%.5f  SStot:%.5f  mean(y):%.5f",ssres,sstot,meany)) # See Wikipedia "Coefficent of determination"" entry
#   ar2test <- 1 - ((1-r2test)*adjrat)
#   print(sprintf("%s R2 test:%.5f   Adjusted R2 test%.5f",titwrd, r2test,ar2test))
#   return(ar2test)
# }

# preStats <- function(qdf,blld,vname){
#   msg <-sprintf("Means - avgval:%.1f  avgstd:%.1f avgcount:%.1f",
#                 mean(qdf$val,na.rm=T),mean(qdf$std,na.rm=T),mean(qdf$cnt,na.rm=T))
#   print(msg)
# }

# doRf <- function(rparms,trn,blld,vname,dropvars=NULL){
#   set.seed(5678)
#   rfntree <- rparms$rfntree
#   print(sprintf("Starting rf on %s-%s",blld,vname))
#   algelap <- 0
#   
#   
#   algstarttime <- Sys.time()
#   # Always drop these because we do not want to predict on them
#   trn$qhr <- NULL
#   trn$time <- NULL
#   trn$datetime <- NULL
#   #  trn$year <- NULL
#   #browser()
#   
#   if (!is.null(dropvars)){
#          print("dropvars:")
#          print(dropvars)
#          print("names(trn):")
#          print(names(trn))
#     idxes <- match(dropvars,names(trn))
#     idxes <- idxes[ !is.na(idxes) ]
#     #     print("match:")
#     #     print(idxes)
#     trn[,idxes] <- list(NULL)
#     print("dropping vars")
#     print(dropvars)
#   }
#   formc <- sprintf("%s ~ .",vname)
#   print(sprintf("Training with %s",formc))
#   form <- as.formula(formc)
#   rf <- randomForest(form, trn, do.trace=10, ntree=rfntree,importance=TRUE)
#   algelap <- as.numeric((Sys.time()-algstarttime)[1],units="secs")
#  # print(rf)
#   print(sprintf("%s Training rf at %s took %.1f secs",vname,algstarttime,algelap))
#  # print(summary(rf))
#   if (!is.null(rf$rsq)){
#     r2plot <- qplot(1:length(rf$rsq),rf$rsq,main=sprintf("%s - R2 by iteration",vname))
#     print(r2plot)
#   } else {
#     print(sprintf("rf$rsq is NULL"))
#     r2plot <- NULL
#   }
#   #browser()
#   print("importance of rf")
#   impplt <- importance(rf)
#   print("print(impplt)")
#   print(impplt)
#   print("varimpplot")
#   varImpPlot(rf,main=sprintf("%s - rf varImpPlot",vname))
#   
#   parms$algelap <- algelap
#   parms$rfntree <- rfntree
#   rvals <- list()
#   rvals[['impplot']] <- impplt
#   rvals[['r2plot']] <- r2plot
#   rvals[['rf']] <- rf
#   return(rvals)
# }

# splitData <- function(rdf,blld,vname,tfrac=0.7,runname="run",testonlastweeks=T,writeOutData=F){
#   if (testonlastweeks){
#     lstidx <- trunc(tfrac*nrow(rdf))
#     istrainpt <- seq(1:nrow(rdf))<lstidx
#     print(sprintf("%s testonlastweeks set - last training index:%d",vname,lstidx))
#   } else {
#     istrainpt <- 2<ranidx  # 92.5 percent training cases
#   }
#   rdf$datetime <- rdf$time
#   trn <- rdf[istrainpt,]
#   tst <- rdf[!istrainpt,]
#   rdf$datetime <- NULL
#   trn$datetime <- NULL
#   tst$datetime <- NULL
#   
# #  browser()
#   if (is.factor(rdf[[vname]])){
#     for (lev in levels(rdf[[vname]])){
#       ntrn <- sum(trn[[vname]]==lev)
#       ntst <- sum(tst[[vname]]==lev)
#      # print(sprintf("%s level:%s ntrn:%d ntst:%d",vname,lev,ntrn,ntst))
#       if (ntrn==0 & ntst!=0){
#      #   print(sprintf("shifting level:%s  ntrn:%d ntst:%d",lev,ntrn,ntst))
#         idx <- which(tst[[vname]]==lev)
#         # move one of the tst records to trn
#         sidx <- sample(idx,1)
#         trn <- rbind(trn,tst[sidx,])
#         tst <- tst[-sidx,]
#       }
#     }
#   }
#   
#   print(sprintf("Spliting %s - train cases:%d test cases:%d",vname,nrow(trn),nrow(tst)))
#   
#   if (writeOutData){
#     trfnamebase <- sprintf("train-%s-%s-%s-%.1f.csv",blld,vname,runname,version)
#     trfname <- sprintf("%s/%s",tdatapath,trfnamebase)
#     print(sprintf("Writing %d rows to %s",nrow(trn),trfname))
#     write.csv(trn,trfname,quote=F,row.names=F)
#     
#     tsfnamebase <- sprintf("test-%s-%s-%s-%.1f.csv",blld,vname,runname,version)
#     tsfname <- sprintf("%s/%s",tdatapath,tsfnamebase)
#     print(sprintf("Writing %d rows to %s",nrow(tst),tsfname))
#     write.csv(tst,tsfname,quote=F,row.names=F)
#   }
#   rlst <- list()
#   rlst[[1]] <- trn
#   rlst[[2]] <- tst
#   print("end of splitdata")
#   return(rlst)
# }

# createPlotSet <- function(rdf,rdfvname,rdfvlab,trn,trnvname,trnvlab,tst,tstvname,tstvlab,orgtime,tzab="UCT"){
#   n1df <- data.frame(time=rdf$time,qhr=rdf$qhr,val=rdf[[rdfvname]],vlab=rdfvlab)
#   n2df <- data.frame(time=trn$time,qhr=trn$qhr,val=trn[[trnvname]],vlab=trnvlab)
#   n3df <- data.frame(time=tst$time,qhr=tst$qhr,val=tst[[tstvname]],vlab=tstvlab)
#   rdf <- rbind(n1df,n2df,n3df)
#   rdf$time <- ymd_hms(rdf$time,tz=tzab)
# #  attr(rdf$time,"tzone") <- tzab
#   rdf$year <- year(rdf$time)
#   rdf$daynum <- trunc(as.numeric(1+difftime(rdf$time, orgtime, units="days")))
#   rdf$weeknum <-trunc(rdf$daynum / 7)
#   rdf$wkrow <- trunc(rdf$weeknum / 4)
#   rdf$wkcol <- rdf$weeknum %% 4
#   rdf$timewk <- (as.numeric(rdf$time)  - rdf$weeknum*7*24*60*60 - as.numeric(orgtime) + 1)/(24*60*60)
#   rdf$holi <- 0 # no holidays
#   return(rdf)
# }

# readData3 <- function(blld,qpath,vname,vfname=NULL,tzab="UCT"){
#   # This qdata was created in 3-advmodel\aggdataNN.Rmd
#   if (is.null(vfname)){
#     vfname <- vname
#   }
#   fname <- sprintf("%s/%s-%s.csv",qpath,blld,vfname)
#   df <- read.csv(fname)
#   dbdf <<- df
#   df$time <- ymd_hms(df$time,tz=tzab)
#   print(sprintf("Read %d rows from %s",nrow(df),fname))
#   sapply(df,class)
#   return(df)
# }

# trainAndPredict_3 <- function(rparms,qpath,vname,vfname=NULL,iatlims=NULL,lmnames=NULL,dropvars=NULL,fullset=F,medianFilter=F,filterDates=T,addlaggediat=F,occAsFactor=F){
#     ergv <- rparms$ergname
#     rrdf <- readData3(rparms$bld,qpath,vname,vfname,rparms$tzab)
# 
#   if (occAsFactor){
#     occfak <- factor(rrdf$occ)
#     maxlevs <- 20
#     if (length(levels(occfak)>maxlevs)){
#       discocc <- trunc( 0.5 + rrdf$occ*maxlevs )/maxlevs
#       occfak <- factor(discocc)
#     }
#     rrdf$occ <- occfak
#   }
#   if (!is.null(ergv)){
#     rrdf[["erg"]] <- rrdf[[ergv]]
#   }
#   rrdf$wday <- mwk(rrdf$wday)
#   if (medianFilter){
#     rrdf[[vname]] <- medianFilter(rrdf[[vname]])
#   }
#   print(summary(rrdf))
#   rrdf[["e.tot"]] <- NULL
#   rrdf[["e.base"]] <- NULL
#   rrdf[["e.plug"]] <- NULL
#   if (addlaggediat){
#     nv <- nrow(rrdf)
#     fval <- rrdf$iat[1]
#     # lagged iat
#     rrdf$liat <- c(fval,rrdf$iat[1:(nv-1)])
#     # recalc the derivitive to be sure about its value
#     rrdf$diat <- rrdf$iat-rrdf$liat
#     # post lag
#     lval <- rrdf$iat[nv]
#     rrdf$piat <- c(rrdf$iat[2:nv],lval)
#     vname <- "piat"
#     rrdf$iat <- NULL
#   }
#   
#   rdf <- rrdf[ complete.cases(rrdf), ]
#   if (filterDates){
#     rdf <- rdf[ rparms$stime<=rdf$time & rdf$time<=rparms$etime, ]
#   }
# 
#   rlst <- splitData(rdf,rparms$bld,vname,tfrac=rparms$trainfrac,runname=rparms$runname)
#   trndf <- rlst[[1]]
#   tstdf <- rlst[[2]]
#   
#   if (occAsFactor){
#     trndf <- droplevels(trndf)
#   }
# #  browser()
#   if (!is.null(trndf$iat)){
#     qiat <-  quantile(trndf$iat,c(0.20,0.80),na.rm=T)
#     qmed <- median(trndf$iat)
#     print("qiat")
#     print(qiat)
#     iatlims <- round(qiat,1)
#     print("iatlims")
#     print(iatlims)
#   }
#   
#   rfvals <- doRf(rparms,trndf,rparms$bld,vname,dropvars )
#   rffit <- rfvals$rf
# #  browser()
#   slmfit <- NULL
# #   if (!is.null(iatlims)){
# #     slmfit <- smseglm(trndf,vname,"iat",dropvars,iatlims,lmnames,trace=F)
# #   }
#   
#   predvname <- paste0("pred.",vname)
#   
#   rdf[[predvname]] <- predict(rffit,rdf)
#   tstdf[[predvname]] <- predict(rffit,tstdf)
#   trndf[[predvname]] <- predict(rffit,trndf)
#   rrdf[[predvname]] <- predict(rffit,rrdf)
#   
#   vlab <- paste0(rparms$bld,"-",vname)
#   
#   # etot.r2 <- r2print("e.tot",test$e.tot,test$res,nrow(test),ncol(test)-1)
#   r2trn <- r2print(sprintf("trn-%s",vlab),trndf[[vname]],trndf[[predvname]],nrow(trndf),ncol(trndf)-1)
#   r2tst <- r2print(sprintf("tst-%s",vlab),tstdf[[vname]],tstdf[[predvname]],nrow(tstdf),ncol(tstdf)-1)
#   
#  # browser()
#   pdf <-  createPlotSet(rdf, predvname,"predicted",trndf,vname,"train",tstdf,vname,"test",rparms$pltstime,rparms$tzab)
#   prdf <- createPlotSet(rrdf,predvname,"predicted",trndf,vname,"train",tstdf,vname,"test",rparms$pltstime,rparms$tzab)
# 
#   
#   rlst <- list()
#   rlst[["trndf"]] <- trndf
#   rlst[["tstdf"]] <- tstdf
#   rlst[["rdf"]] <- rdf
#   rlst[["prdf"]] <- prdf
#   rlst[["rffit"]] <- rffit
#   rlst[["slmfit"]] <- slmfit
#   rlst[["iatlims"]] <- iatlims
#  # rlst[["qmed"]] <- qmed
#   rlst[["r2plot"]] <- rfvals$r2plot
#   rlst[["impplot"]] <- rfvals$impplot
#   return(rlst)
# }

# detailPlot3 <- function(qdf,rparms,graphpath, vname,wdf = NULL,bdf = NULL,xlim=NULL,ylim=NULL,dval=F,saveplot=T) {
#   if (!is.null(ylim)){
#     qdf$val <- pmax( ylim[1], pmin( qdf$val, ylim[2]))
#   }
#   qdf <- qdf[!is.na(qdf$val), ]
# 
#   # Add missing weather
#   if (!is.null(wdf)){
#     wncdf <- wdf[!complete.cases(wdf),c(1,2)]
#     wncdf$lev <- rep(0,nrow(wncdf))
#     wncdf$dn <-
#       trunc(as.numeric(1 + difftime(wncdf$wtime, rparms$pltstime, units = "days")))
#     wncdf$wn <- trunc(wncdf$dn / 7)
#     wncdf$wkrow <- trunc(wncdf$wn / 4)
#     wncdf$wkcol <- trunc(wncdf$wn %% 4)
#     wncdf$timewk <-
#       (as.numeric(wncdf$wtime)  - wncdf$wn * 7 * 24 * 60 * 60 - as.numeric(rparms$pltstime) + 1) /
#       (24 * 60 * 60)
#     wncdf$series <- rep("no-weather-data",nrow(wncdf))
#   }
#   
#   if (!is.null(bdf)){
#     # Add holidays
#     hodf <- bdf[bdf$holi > 0,c(1,2)]
#     hodf$lev <- rep(0,nrow(hodf))
#     hodf$dn <-
#       trunc(as.numeric(1 + difftime(hodf$time, rparms$pltstime, units = "days")))
#     hodf$wn <- trunc(hodf$dn / 7)
#     hodf$wkrow <- trunc(hodf$wn / 4)
#     hodf$wkcol <- trunc(hodf$wn %% 4)
#     hodf$timewk <-
#       (as.numeric(hodf$time)  - hodf$wn * 7 * 24 * 60 * 60 - as.numeric(rparms$pltstime) + 1) /
#       (24 * 60 * 60)
#     hodf$series <- rep("holiday",nrow(hodf))
#   }
#   
#   
#   # Add Month date lines
#   vmax <- max( qdf$val,na.rm=T )
#   vmin <- min( qdf$val,na.rm=T )
#   print(sprintf("Value range min:%.4f  max:%.4f",vmin,vmax))
#   
#   vmax9 <- 0.9 * vmax
#   atlist <- c()
#   vldata <- NULL
#   for (y in 2013:2014) {
#     iy <- y - 2000
#     for (m in 1:12) {
#       dt <- ymd(sprintf("%d-%d-1",y,m),tz = "US/Pacific")
#       dn <- trunc(as.numeric(1 + difftime(dt, rparms$pltstime, units = "days")))
#       wn <- trunc(dn / 7)
#       wr <- trunc(wn / 4)
#       wc <- trunc(wn %% 4)
#       twk <-
#         (as.numeric(dt)  - wn * 7 * 24 * 60 * 60 - as.numeric(rparms$pltstime) + 1) / (24 *
#                                                                                60 * 60)
#       jdf <- data.frame(wkrow = wr,wkcol = wc,timewk = twk)
#       vldata <- rbind(vldata,jdf)
#       aldf <-
#         data.frame(
#           timewk = twk + 0.25, val = vmax9, vlab = "month-start",
#           lab = sprintf("%d-%d",iy,m),wkrow = wr,wkcol = wc
#         )
#       atlist[[length(atlist) + 1]] <- aldf
#     }
#   }
#   ecolors <- c("blue","green","red","black","darkgreen","darkblue")
#   names(ecolors) <- c("predicted","train","test","month-start","no-weather-data","holiday")
#   #print(sprintf("vname:%s - %s",vname,ecolors[vname]))
#   #cvname <- ecolors[vname]
#   fp <- ggplot(qdf,aes(timewk,val,color=vlab)) +
#     
#     geom_point(size = 0.01,shape = 16,na.rm=T ) +
#     
#     facet_grid(wkrow ~ wkcol) +
#     scale_color_manual(values = ecolors) +
#     geom_vline(aes(xintercept = timewk),vldata,size = 0.01) +        # month markers
#     labs(title=sprintf("%s - %s",rparms$bld,vname),y=vname,x="Time") + 
#     theme_bw()  
#   
#   if (!is.null(wdf)){
#     fp <- fp + geom_point(
#       aes(timewk,lev),size = 1,data = wncdf,shape = 16,alpha = I(0.5),na.rm=T
#     )  # missing weather
#   }
#   if (!is.null(bdf)){
#     fp <- fp + geom_point(
#       aes(timewk,lev),size = 1,data = hodf,shape = 16,alpha = I(0.5),na.rm=T
#     )  # holidays
#   }
#   if (!is.null(xlim)){
#     fp <- fp + scale_x_continuous( limits=xlim )
#   }  
#   if (!is.null(ylim)){
#     fp <- fp + scale_y_continuous( limits=ylim )
#   }
#   ## Add month date lines to plot
#   jnk <-
#     sapply(atlist,function(x) {
#       # have to assign one level up, thus the double <<-
#       fp <<- fp + geom_text(data = x,aes(timewk,val),size = 2,label = x$lab)
#       #print(sprintf("adding %s",x$lab))
#     })
#   #glbfp <<- fp
#   if (saveplot){
#     gfname <- sprintf("%s/wkpanels-%s-%s-%.2f.png",graphpath,rparms$bld,rparms$bchtime,rparms$trainfrac)
#     #ggsave(file=gfname, plot=fp, width=rparms$gwidth, height=rparms$gheight)
#     png(gfname,width = 2000,height = 4000)
#     #  print(fp)
#     jnk <- dev.off()
#   }
#   return(fp)
# }

# overviewPlot3 <- function(qdf,rparms,vname,xlim=NULL,ylim=NULL,dval=F){
#   if (!is.null(ylim)){
#     qdf$val <- pmax( ylim[1], pmin( qdf$val, ylim[2]))
#   }
#   ecolors <- c("blue","green","red","black","darkgreen","darkblue")
#   names(ecolors) <- c("predicted","train","test","month-start","no-weather-data","holiday")
#   qqdf <- qdf[!is.na(qdf$val), ]
#   qp <- qplot(time,val,data=qqdf,color=I(ecolors[qqdf$vlab]),alpha=I(1/10)) +
#     labs(title=sprintf("%s - %s",rparms$bld,vname),y=vname,x="Time") + 
#     scale_color_manual(values=ecolors) +
#     guides(colour = guide_legend(override.aes = list(alpha = 1)))  # override legend alpha
#   if (!is.null(xlim)){
#     qp <- qp + scale_x_continuous( limits=xlim )
#   }  
#   if (!is.null(ylim)){
#     qp <- qp + scale_y_continuous( limits=ylim )
#   }
#   # print(qp)
#   return(qp)
# }

Train and plot

# trainOne <- function(){
#   erglst <- trainAndPredict_3(rparms,epath$qdata,"erg",vfname="erg3",dropvars=NULL)
#   overviewPlot3(erglst[["prdf"]],rparms,rparms$ergname)
#   detailPlot3(erglst[["prdf"]],rparms,epath$graph,rparms$ergname)
#   
# }
# 
# trainAll <- function(bld="City Faker",tf=0.7,rfn=10){
#   rv <- list()
#   rv[["occ"]] <-  genErgProf(bld,"occ",trainfak=tf,rfntree=rfn,ybase=0.8,yrng=0.8,ymin=0,ymax=1)
#   rv[["iat"]] <-  genErgProf(bld,"iat",trainfak=tf,rfntree=rfn,ybase=72,yrng=3)
#   rv[["diat"]] <-  genErgProf(bld,"diat",trainfak=tf,rfntree=rfn,ybase=0,yrng=3)
#   rv[["e.base"]] <- genErgProf(bld,"e.base",trainfak=tf,rfntree=rfn,ybase=300,yrng=100)
#   rv[["e.tot"]] <- genErgProf(bld,"e.tot",trainfak=tf,rfntree=rfn,ybase=1300,yrng=300)
#   return(rv)
# }

# trainAll <- function(rparms,tf=0.7,rfn=10){
#   
#   rv <- list()
#   
#   depvar <- "occ"
#   occlst <- trainAndPredict_3(rparms,epath$qdata,depvar,
#                          dropvars=c("iat",feats$wetr,"ydayf","holi","year","hdcnt"),
#                         occAsFactor = T)
#   og <- overviewPlot3(occlst[["prdf"]],rparms,depvar)
#   dg <- NULL #detailPlot(occlst[["prdf"]],rparms,"occ")
#   occlst$overviewplot <- og
#   occlst$detailplot <- dg
#   occlst$depvar <- depvar
#   rv[[depvar]] <- occlst
#   
#   depvar <- "erg"
#   erglst <- trainAndPredict_3(rparms,epath$qdata,depvar,vfname="erg3",dropvars=NULL)
#   og <- overviewPlot3(erglst[["prdf"]],rparms,rparms$ergname)
#   dg <- detailPlot3(erglst[["prdf"]],rparms,epath$graph,rparms$ergname)
#   erglst$overviewplot <- og
#   erglst$detailplot <- dg
#   erglst$depvar <- depvar
#   rv[[depvar]] <- erglst
#   
#   depvar <- "diat"
#   diatlst <- trainAndPredict_3(rparms,epath$qdata,depvar,vfname="diat3",iatlim=iatborders,lmnames=rparms$hvaclevs,
#                                dropvars=c(feats$time,feats$bld,feats$dwetr,feats$pred),
#                                medianFilter=F,occAsFactor = F)
#   og <- overviewPlot3(diatlst[["prdf"]],rparms,depvar,ylim=c(-0.25,0.25))
#   dg <- detailPlot3(diatlst[["prdf"]],rparms,epath$graph,depvar,ylim=c(-0.25,0.25))
#   diatlst$overviewplot <- og
#   diatlst$detailplot <- dg
#   diatlst$depvar <- depvar
#   rv[[depvar]] <- diatlst
#   
#   depvar <- "iat"
#   iiatlst <- trainAndPredict_3(rparms,epath$qdata,depvar,vfname="diat3",lmnames=rparms$hvaclevs,
#                                dropvars=c(feats$time,feats$bld,feats$dwetr,feats$pred),
#                                medianFilter=F,addlaggediat=T,occAsFactor = F)
#   og <- overviewPlot3(iiatlst[["prdf"]],rparms,depvar,ylim=c(-0.25,0.25))
#   dg <- detailPlot3(iiatlst[["prdf"]],rparms,epath$graph,depvar,ylim=c(-0.25,0.25))
#   iiatlst$overviewplot <- og
#   iiatlst$detailplot <- dg
#   iiatlst$depvar <- depvar
#   rv[[depvar]] <- iiatlst
#   return(rv)
# }
tset <- trainAll(rparms)
## [1] "Read 70090 rows from ../5-prescriptive/qdata/City Center-occ.csv"
##       qhr             time                          year     
##  Min.   :    0   Min.   :2013-01-01 00:00:00   Min.   :2013  
##  1st Qu.:17522   1st Qu.:2013-07-02 13:30:00   1st Qu.:2013  
##  Median :35040   Median :2014-01-01 00:00:00   Median :2014  
##  Mean   :35041   Mean   :2014-01-01 00:12:44   Mean   :2014  
##  3rd Qu.:52562   3rd Qu.:2014-07-02 13:15:00   3rd Qu.:2014  
##  Max.   :70080   Max.   :2014-12-31 23:45:00   Max.   :2014  
##                  NA's   :1                     NA's   :1     
##      ydayf              hourf             wday            holi        
##  Min.   :0.002732   Min.   :0.0000   Min.   :1.000   Min.   :0.00000  
##  1st Qu.:0.251399   1st Qu.:0.2396   1st Qu.:2.000   1st Qu.:0.00000  
##  Median :0.500063   Median :0.4896   Median :4.000   Median :0.00000  
##  Mean   :0.500162   Mean   :0.4947   Mean   :3.996   Mean   :0.02467  
##  3rd Qu.:0.748726   3rd Qu.:0.7396   3rd Qu.:6.000   3rd Qu.:0.00000  
##  Max.   :0.997380   Max.   :0.9896   Max.   :7.000   Max.   :1.00000  
##  NA's   :1          NA's   :1        NA's   :1       NA's   :1        
##      temp.f         tcool.f           theat.f          dewp.f     
##  Min.   :15.50   Min.   : 0.0000   Min.   : 0.00   Min.   : 0.90  
##  1st Qu.:44.20   1st Qu.: 0.0000   1st Qu.: 8.50   1st Qu.:39.72  
##  Median :52.10   Median : 0.0000   Median :17.92   Median :46.40  
##  Mean   :53.04   Mean   : 0.4821   Mean   :17.62   Mean   :45.72  
##  3rd Qu.:61.50   3rd Qu.: 0.0000   3rd Qu.:25.80   3rd Qu.:53.16  
##  Max.   :96.10   Max.   :24.0400   Max.   :54.46   Max.   :68.60  
##  NA's   :8       NA's   :8         NA's   :8       NA's   :8      
##     pres.pa        wind.deg        wind.kmh           hum.pc     
##  Min.   : 986   Min.   :  0.0   Min.   : 0.0000   Min.   :19.70  
##  1st Qu.:1010   1st Qu.:114.2   1st Qu.: 0.0000   1st Qu.:69.50  
##  Median :1015   Median :171.2   Median : 0.4221   Median :83.10  
##  Mean   :1015   Mean   :165.8   Mean   : 0.8841   Mean   :78.19  
##  3rd Qu.:1019   3rd Qu.:219.4   3rd Qu.: 1.3333   3rd Qu.:90.00  
##  Max.   :1043   Max.   :360.0   Max.   :12.8670   Max.   :97.30  
##  NA's   :8      NA's   :8       NA's   :8         NA's   :8      
##     rain.mm            hdcnt           iat             occ       
##  Min.   : 0.0000   Min.   :1879   Min.   :67.41   0.05   : 9741  
##  1st Qu.: 0.0000   1st Qu.:2024   1st Qu.:71.38   0.1    : 7133  
##  Median : 0.0000   Median :2045   Median :72.19   0.95   : 5842  
##  Mean   : 0.0937   Mean   :2026   Mean   :72.22   1      : 5193  
##  3rd Qu.: 0.0000   3rd Qu.:2062   3rd Qu.:73.17   0.15   : 2666  
##  Max.   :14.2555   Max.   :2085   Max.   :77.13   (Other): 4444  
##  NA's   :8         NA's   :1      NA's   :35532   NA's   :35071  
## [1] "occ testonlastweeks set - last training index:5374"
## [1] "Spliting occ - train cases:5373 test cases:406"
## [1] "end of splitdata"
## [1] "qiat"
##      20%      80% 
## 71.20232 72.40789 
## [1] "iatlims"
##  20%  80% 
## 71.2 72.4 
## [1] "Starting rf on City Center-occ"
## [1] "dropvars:"
##  [1] "iat"      "temp.f"   "tcool.f"  "theat.f"  "dewp.f"   "pres.pa" 
##  [7] "wind.deg" "wind.kmh" "hum.pc"   "rain.mm"  "ydayf"    "holi"    
## [13] "year"     "hdcnt"   
## [1] "names(trn):"
##  [1] "year"     "ydayf"    "hourf"    "wday"     "holi"     "temp.f"  
##  [7] "tcool.f"  "theat.f"  "dewp.f"   "pres.pa"  "wind.deg" "wind.kmh"
## [13] "hum.pc"   "rain.mm"  "hdcnt"    "iat"      "occ"     
## [1] "dropping vars"
##  [1] "iat"      "temp.f"   "tcool.f"  "theat.f"  "dewp.f"   "pres.pa" 
##  [7] "wind.deg" "wind.kmh" "hum.pc"   "rain.mm"  "ydayf"    "holi"    
## [13] "year"     "hdcnt"   
## [1] "Training with occ ~ ."
## ntree      OOB      1      2      3      4      5      6      7      8      9     10     11     12     13     14     15     16     17     18     19     20     21
##    10:  26.85%100.00% 33.62% 27.89% 66.02%100.00%100.00%100.00% 64.29% 93.75%100.00%100.00%100.00%100.00%100.00%100.00% 81.82% 93.33%100.00%100.00%100.00%  1.48%
##    20:  25.07%100.00% 33.20% 24.85% 57.83%100.00%100.00%100.00% 68.97%100.00%100.00%100.00%100.00%100.00%100.00%100.00% 90.91% 86.67%100.00%100.00%100.00%  1.41%
##    30:  24.25%100.00% 30.62% 24.51% 55.42%100.00%100.00%100.00% 86.21%100.00%100.00%100.00%100.00%100.00%100.00%100.00%100.00% 80.00%100.00%100.00%100.00%  1.41%
##    40:  23.47%100.00% 28.50% 24.29% 53.01%100.00%100.00%100.00% 68.97%100.00%100.00%100.00%100.00%100.00%100.00%100.00%100.00% 86.67%100.00%100.00%100.00%  1.59%
##    50:  23.19%100.00% 27.88% 24.07% 52.29%100.00%100.00%100.00% 68.97%100.00%100.00%100.00%100.00%100.00%100.00%100.00% 90.91%100.00%100.00%100.00% 96.77%  1.59%
##    60:  23.34%100.00% 28.03% 24.40% 52.29%100.00%100.00%100.00% 68.97%100.00%100.00%100.00%100.00%100.00%100.00%100.00%100.00% 93.33%100.00%100.00%100.00%  1.53%
##    70:  23.19%100.00% 26.86% 24.78% 52.77%100.00%100.00%100.00% 68.97%100.00%100.00%100.00%100.00%100.00%100.00%100.00%100.00% 93.33%100.00%100.00% 96.77%  1.47%
## [1] "occ Training rf at 2016-01-22 23:51:40 took 0.4 secs"
## [1] "trn-City Center-occ regressors:5373  predictors:19   adjrat:1.00355"
## [1] "   SSres:113.20500  SStot:953.50692  mean(y):0.38163"
## [1] "trn-City Center-occ R2 test:0.88128   Adjusted R2 test0.88085"
## [1] "tst-City Center-occ regressors:406  predictors:19   adjrat:1.04922"
## [1] "   SSres:6.99250  SStot:72.67490  mean(y):0.39951"
## [1] "tst-City Center-occ R2 test:0.90378   Adjusted R2 test0.89905"
## [1] "Read 70104 rows from ../5-prescriptive/qdata/City Center-erg3.csv"
##       qhr             time                          year     
##  Min.   :    0   Min.   :2013-01-01 00:00:00   Min.   :2013  
##  1st Qu.:17526   1st Qu.:2013-07-02 14:22:30   1st Qu.:2013  
##  Median :35041   Median :2014-01-01 00:00:00   Median :2014  
##  Mean   :35044   Mean   :2014-01-01 00:55:35   Mean   :2014  
##  3rd Qu.:52566   3rd Qu.:2014-07-02 14:22:30   3rd Qu.:2014  
##  Max.   :70080   Max.   :2014-12-31 23:45:00   Max.   :2014  
##                  NA's   :1                     NA's   :1     
##      ydayf              hourf             wday            holi        
##  Min.   :0.002732   Min.   :0.0000   Min.   :1.000   Min.   :0.00000  
##  1st Qu.:0.251402   1st Qu.:0.2396   1st Qu.:2.000   1st Qu.:0.00000  
##  Median :0.500068   Median :0.4896   Median :4.000   Median :0.00000  
##  Mean   :0.500229   Mean   :0.4946   Mean   :3.997   Mean   :0.02466  
##  3rd Qu.:0.748733   3rd Qu.:0.7396   3rd Qu.:6.000   3rd Qu.:0.00000  
##  Max.   :0.997380   Max.   :0.9896   Max.   :7.000   Max.   :1.00000  
##  NA's   :1          NA's   :1        NA's   :1       NA's   :1        
##      temp.f         tcool.f          theat.f           dewp.f     
##  Min.   :15.50   Min.   : 0.000   Min.   : 0.000   Min.   : 0.90  
##  1st Qu.:44.20   1st Qu.: 0.000   1st Qu.: 8.518   1st Qu.:39.72  
##  Median :52.10   Median : 0.000   Median :17.920   Median :46.40  
##  Mean   :53.04   Mean   : 0.482   Mean   :17.625   Mean   :45.72  
##  3rd Qu.:61.50   3rd Qu.: 0.000   3rd Qu.:25.800   3rd Qu.:53.16  
##  Max.   :96.10   Max.   :24.040   Max.   :54.460   Max.   :68.60  
##  NA's   :8       NA's   :8        NA's   :8        NA's   :8      
##     pres.pa        wind.deg        wind.kmh           hum.pc     
##  Min.   : 986   Min.   :  0.0   Min.   : 0.0000   Min.   :19.70  
##  1st Qu.:1010   1st Qu.:114.3   1st Qu.: 0.0000   1st Qu.:69.50  
##  Median :1015   Median :171.2   Median : 0.4221   Median :83.10  
##  Mean   :1015   Mean   :165.8   Mean   : 0.8839   Mean   :78.19  
##  3rd Qu.:1019   3rd Qu.:219.4   3rd Qu.: 1.3333   3rd Qu.:90.00  
##  Max.   :1043   Max.   :360.0   Max.   :12.8670   Max.   :97.30  
##  NA's   :8      NA's   :8       NA's   :8         NA's   :8      
##     rain.mm             hdcnt           iat             occ       
##  Min.   : 0.00000   Min.   :1879   Min.   :67.41   Min.   :0.00   
##  1st Qu.: 0.00000   1st Qu.:2024   1st Qu.:71.38   1st Qu.:0.07   
##  Median : 0.00000   Median :2045   Median :72.19   Median :0.13   
##  Mean   : 0.09369   Mean   :2026   Mean   :72.22   Mean   :0.39   
##  3rd Qu.: 0.00000   3rd Qu.:2062   3rd Qu.:73.17   3rd Qu.:0.96   
##  Max.   :14.25550   Max.   :2085   Max.   :77.13   Max.   :1.00   
##  NA's   :8          NA's   :1      NA's   :35532   NA's   :35071  
##       erg            e.tot           e.base           e.plug     
##  Min.   :1237    Min.   :1237    Min.   : 220.3   Min.   :247.0  
##  1st Qu.:1434    1st Qu.:1434    1st Qu.: 563.9   1st Qu.:337.7  
##  Median :1586    Median :1586    Median : 677.0   Median :354.0  
##  Mean   :1732    Mean   :1732    Mean   : 793.5   Mean   :395.6  
##  3rd Qu.:2008    3rd Qu.:2008    3rd Qu.:1042.9   3rd Qu.:479.0  
##  Max.   :4174    Max.   :4174    Max.   :3213.5   Max.   :648.2  
##  NA's   :36238   NA's   :36238   NA's   :36238    NA's   :36238  
## [1] "erg testonlastweeks set - last training index:5198"
## [1] "Spliting erg - train cases:5197 test cases:393"
## [1] "end of splitdata"
## [1] "qiat"
##      20%      80% 
## 71.18924 72.41323 
## [1] "iatlims"
##  20%  80% 
## 71.2 72.4 
## [1] "Starting rf on City Center-erg"
## [1] "Training with erg ~ ."
##      |      Out-of-bag   |
## Tree |      MSE  %Var(y) |
##   10 |     3958     3.74 |
##   20 |     3165     2.99 |
##   30 |     2936     2.78 |
##   40 |     2736     2.59 |
##   50 |     2662     2.52 |
##   60 |     2598     2.46 |
##   70 |     2575     2.44 |
## [1] "erg Training rf at 2016-01-22 23:51:49 took 4.0 secs"
## [1] "trn-City Center-erg regressors:5197  predictors:20   adjrat:1.00386"
## [1] "   SSres:2823738.62144  SStot:549265224.52927  mean(y):1636.11545"
## [1] "trn-City Center-erg R2 test:0.99486   Adjusted R2 test0.99484"
## [1] "tst-City Center-erg regressors:393  predictors:20   adjrat:1.05376"
## [1] "   SSres:25207025.25397  SStot:69966655.16463  mean(y):1912.52341"
## [1] "tst-City Center-erg R2 test:0.63973   Adjusted R2 test0.62036"
## [1] "Value range min:1236.7000  max:3627.4000"
## [1] "Read 70104 rows from ../5-prescriptive/qdata/City Center-diat3.csv"
##       qhr             time                          year     
##  Min.   :    0   Min.   :2013-01-01 00:00:00   Min.   :2013  
##  1st Qu.:17526   1st Qu.:2013-07-02 14:22:30   1st Qu.:2013  
##  Median :35041   Median :2014-01-01 00:00:00   Median :2014  
##  Mean   :35044   Mean   :2014-01-01 00:55:35   Mean   :2014  
##  3rd Qu.:52566   3rd Qu.:2014-07-02 14:22:30   3rd Qu.:2014  
##  Max.   :70080   Max.   :2014-12-31 23:45:00   Max.   :2014  
##                  NA's   :1                     NA's   :1     
##      ydayf              hourf             wday            holi        
##  Min.   :0.002732   Min.   :0.0000   Min.   :1.000   Min.   :0.00000  
##  1st Qu.:0.251402   1st Qu.:0.2396   1st Qu.:2.000   1st Qu.:0.00000  
##  Median :0.500068   Median :0.4896   Median :4.000   Median :0.00000  
##  Mean   :0.500229   Mean   :0.4946   Mean   :3.997   Mean   :0.02466  
##  3rd Qu.:0.748733   3rd Qu.:0.7396   3rd Qu.:6.000   3rd Qu.:0.00000  
##  Max.   :0.997380   Max.   :0.9896   Max.   :7.000   Max.   :1.00000  
##  NA's   :1          NA's   :1        NA's   :1       NA's   :1        
##      temp.f         tcool.f          theat.f           dewp.f     
##  Min.   :15.50   Min.   : 0.000   Min.   : 0.000   Min.   : 0.90  
##  1st Qu.:44.20   1st Qu.: 0.000   1st Qu.: 8.518   1st Qu.:39.72  
##  Median :52.10   Median : 0.000   Median :17.920   Median :46.40  
##  Mean   :53.04   Mean   : 0.482   Mean   :17.625   Mean   :45.72  
##  3rd Qu.:61.50   3rd Qu.: 0.000   3rd Qu.:25.800   3rd Qu.:53.16  
##  Max.   :96.10   Max.   :24.040   Max.   :54.460   Max.   :68.60  
##  NA's   :8       NA's   :8        NA's   :8        NA's   :8      
##     pres.pa        wind.deg        wind.kmh           hum.pc     
##  Min.   : 986   Min.   :  0.0   Min.   : 0.0000   Min.   :19.70  
##  1st Qu.:1010   1st Qu.:114.3   1st Qu.: 0.0000   1st Qu.:69.50  
##  Median :1015   Median :171.2   Median : 0.4221   Median :83.10  
##  Mean   :1015   Mean   :165.8   Mean   : 0.8839   Mean   :78.19  
##  3rd Qu.:1019   3rd Qu.:219.4   3rd Qu.: 1.3333   3rd Qu.:90.00  
##  Max.   :1043   Max.   :360.0   Max.   :12.8670   Max.   :97.30  
##  NA's   :8      NA's   :8       NA's   :8         NA's   :8      
##     rain.mm             hdcnt           iat             occ       
##  Min.   : 0.00000   Min.   :1879   Min.   :67.41   Min.   :0.00   
##  1st Qu.: 0.00000   1st Qu.:2024   1st Qu.:71.38   1st Qu.:0.07   
##  Median : 0.00000   Median :2045   Median :72.19   Median :0.13   
##  Mean   : 0.09369   Mean   :2026   Mean   :72.22   Mean   :0.39   
##  3rd Qu.: 0.00000   3rd Qu.:2062   3rd Qu.:73.17   3rd Qu.:0.96   
##  Max.   :14.25550   Max.   :2085   Max.   :77.13   Max.   :1.00   
##  NA's   :8          NA's   :1      NA's   :35532   NA's   :35071  
##       erg            e.tot           e.base           e.plug     
##  Min.   :1237    Min.   :1237    Min.   : 220.3   Min.   :247.0  
##  1st Qu.:1434    1st Qu.:1434    1st Qu.: 563.9   1st Qu.:337.7  
##  Median :1586    Median :1586    Median : 677.0   Median :354.0  
##  Mean   :1732    Mean   :1732    Mean   : 793.5   Mean   :395.6  
##  3rd Qu.:2008    3rd Qu.:2008    3rd Qu.:1042.9   3rd Qu.:479.0  
##  Max.   :4174    Max.   :4174    Max.   :3213.5   Max.   :648.2  
##  NA's   :36238   NA's   :36238   NA's   :36238    NA's   :36238  
##       diat      
##  Min.   :-0.97  
##  1st Qu.:-0.02  
##  Median : 0.00  
##  Mean   : 0.00  
##  3rd Qu.: 0.03  
##  Max.   : 1.40  
##  NA's   :35817  
## [1] "diat testonlastweeks set - last training index:5155"
## [1] "Spliting diat - train cases:5154 test cases:390"
## [1] "end of splitdata"
## [1] "qiat"
##      20%      80% 
## 71.19176 72.41534 
## [1] "iatlims"
##  20%  80% 
## 71.2 72.4 
## [1] "Starting rf on City Center-diat"
## [1] "dropvars:"
##  [1] "time"     "year"     "ydayf"    "hourf"    "wday"     "holi"    
##  [7] "hdcnt"    "tcool.f"  "theat.f"  "dewp.f"   "pres.pa"  "wind.deg"
## [13] "wind.kmh" "hum.pc"   "rain.mm"  "occ"     
## [1] "names(trn):"
##  [1] "year"     "ydayf"    "hourf"    "wday"     "holi"     "temp.f"  
##  [7] "tcool.f"  "theat.f"  "dewp.f"   "pres.pa"  "wind.deg" "wind.kmh"
## [13] "hum.pc"   "rain.mm"  "hdcnt"    "iat"      "occ"      "erg"     
## [19] "diat"    
## [1] "dropping vars"
##  [1] "time"     "year"     "ydayf"    "hourf"    "wday"     "holi"    
##  [7] "hdcnt"    "tcool.f"  "theat.f"  "dewp.f"   "pres.pa"  "wind.deg"
## [13] "wind.kmh" "hum.pc"   "rain.mm"  "occ"     
## [1] "Training with diat ~ ."
##      |      Out-of-bag   |
## Tree |      MSE  %Var(y) |
##   10 | 0.003682    96.63 |
##   20 | 0.003436    90.17 |
##   30 | 0.003263    85.64 |
##   40 | 0.003178    83.42 |
##   50 |  0.00313    82.14 |
##   60 | 0.003101    81.40 |
##   70 | 0.003079    80.80 |
## [1] "diat Training rf at 2016-01-22 23:52:01 took 1.7 secs"
## [1] "trn-City Center-diat regressors:5154  predictors:21   adjrat:1.00409"
## [1] "   SSres:3.98624  SStot:19.63796  mean(y):-0.00038"
## [1] "trn-City Center-diat R2 test:0.79701   Adjusted R2 test0.79618"
## [1] "tst-City Center-diat regressors:390  predictors:21   adjrat:1.05707"
## [1] "   SSres:1.12558  SStot:1.89980  mean(y):0.00291"
## [1] "tst-City Center-diat R2 test:0.40753   Adjusted R2 test0.37372"
## [1] "Value range min:-0.2500  max:0.2500"
## [1] "Read 70104 rows from ../5-prescriptive/qdata/City Center-diat3.csv"
##       qhr             time                          year     
##  Min.   :    0   Min.   :2013-01-01 00:00:00   Min.   :2013  
##  1st Qu.:17526   1st Qu.:2013-07-02 14:22:30   1st Qu.:2013  
##  Median :35041   Median :2014-01-01 00:00:00   Median :2014  
##  Mean   :35044   Mean   :2014-01-01 00:55:35   Mean   :2014  
##  3rd Qu.:52566   3rd Qu.:2014-07-02 14:22:30   3rd Qu.:2014  
##  Max.   :70080   Max.   :2014-12-31 23:45:00   Max.   :2014  
##                  NA's   :1                     NA's   :1     
##      ydayf              hourf             wday            holi        
##  Min.   :0.002732   Min.   :0.0000   Min.   :1.000   Min.   :0.00000  
##  1st Qu.:0.251402   1st Qu.:0.2396   1st Qu.:2.000   1st Qu.:0.00000  
##  Median :0.500068   Median :0.4896   Median :4.000   Median :0.00000  
##  Mean   :0.500229   Mean   :0.4946   Mean   :3.997   Mean   :0.02466  
##  3rd Qu.:0.748733   3rd Qu.:0.7396   3rd Qu.:6.000   3rd Qu.:0.00000  
##  Max.   :0.997380   Max.   :0.9896   Max.   :7.000   Max.   :1.00000  
##  NA's   :1          NA's   :1        NA's   :1       NA's   :1        
##      temp.f         tcool.f          theat.f           dewp.f     
##  Min.   :15.50   Min.   : 0.000   Min.   : 0.000   Min.   : 0.90  
##  1st Qu.:44.20   1st Qu.: 0.000   1st Qu.: 8.518   1st Qu.:39.72  
##  Median :52.10   Median : 0.000   Median :17.920   Median :46.40  
##  Mean   :53.04   Mean   : 0.482   Mean   :17.625   Mean   :45.72  
##  3rd Qu.:61.50   3rd Qu.: 0.000   3rd Qu.:25.800   3rd Qu.:53.16  
##  Max.   :96.10   Max.   :24.040   Max.   :54.460   Max.   :68.60  
##  NA's   :8       NA's   :8        NA's   :8        NA's   :8      
##     pres.pa        wind.deg        wind.kmh           hum.pc     
##  Min.   : 986   Min.   :  0.0   Min.   : 0.0000   Min.   :19.70  
##  1st Qu.:1010   1st Qu.:114.3   1st Qu.: 0.0000   1st Qu.:69.50  
##  Median :1015   Median :171.2   Median : 0.4221   Median :83.10  
##  Mean   :1015   Mean   :165.8   Mean   : 0.8839   Mean   :78.19  
##  3rd Qu.:1019   3rd Qu.:219.4   3rd Qu.: 1.3333   3rd Qu.:90.00  
##  Max.   :1043   Max.   :360.0   Max.   :12.8670   Max.   :97.30  
##  NA's   :8      NA's   :8       NA's   :8         NA's   :8      
##     rain.mm             hdcnt           iat             occ       
##  Min.   : 0.00000   Min.   :1879   Min.   :67.41   Min.   :0.00   
##  1st Qu.: 0.00000   1st Qu.:2024   1st Qu.:71.38   1st Qu.:0.07   
##  Median : 0.00000   Median :2045   Median :72.19   Median :0.13   
##  Mean   : 0.09369   Mean   :2026   Mean   :72.22   Mean   :0.39   
##  3rd Qu.: 0.00000   3rd Qu.:2062   3rd Qu.:73.17   3rd Qu.:0.96   
##  Max.   :14.25550   Max.   :2085   Max.   :77.13   Max.   :1.00   
##  NA's   :8          NA's   :1      NA's   :35532   NA's   :35071  
##       erg            e.tot           e.base           e.plug     
##  Min.   :1237    Min.   :1237    Min.   : 220.3   Min.   :247.0  
##  1st Qu.:1434    1st Qu.:1434    1st Qu.: 563.9   1st Qu.:337.7  
##  Median :1586    Median :1586    Median : 677.0   Median :354.0  
##  Mean   :1732    Mean   :1732    Mean   : 793.5   Mean   :395.6  
##  3rd Qu.:2008    3rd Qu.:2008    3rd Qu.:1042.9   3rd Qu.:479.0  
##  Max.   :4174    Max.   :4174    Max.   :3213.5   Max.   :648.2  
##  NA's   :36238   NA's   :36238   NA's   :36238    NA's   :36238  
##       diat      
##  Min.   :-0.97  
##  1st Qu.:-0.02  
##  Median : 0.00  
##  Mean   : 0.00  
##  3rd Qu.: 0.03  
##  Max.   : 1.40  
##  NA's   :35817  
## [1] "piat testonlastweeks set - last training index:5172"
## [1] "Spliting piat - train cases:5171 test cases:391"
## [1] "end of splitdata"
## [1] "Starting rf on City Center-piat"
## [1] "dropvars:"
##  [1] "time"     "year"     "ydayf"    "hourf"    "wday"     "holi"    
##  [7] "hdcnt"    "tcool.f"  "theat.f"  "dewp.f"   "pres.pa"  "wind.deg"
## [13] "wind.kmh" "hum.pc"   "rain.mm"  "occ"     
## [1] "names(trn):"
##  [1] "year"     "ydayf"    "hourf"    "wday"     "holi"     "temp.f"  
##  [7] "tcool.f"  "theat.f"  "dewp.f"   "pres.pa"  "wind.deg" "wind.kmh"
## [13] "hum.pc"   "rain.mm"  "hdcnt"    "occ"      "erg"      "diat"    
## [19] "liat"     "piat"    
## [1] "dropping vars"
##  [1] "time"     "year"     "ydayf"    "hourf"    "wday"     "holi"    
##  [7] "hdcnt"    "tcool.f"  "theat.f"  "dewp.f"   "pres.pa"  "wind.deg"
## [13] "wind.kmh" "hum.pc"   "rain.mm"  "occ"     
## [1] "Training with piat ~ ."
##      |      Out-of-bag   |
## Tree |      MSE  %Var(y) |
##   10 |  0.04553     3.91 |
##   20 |  0.02994     2.57 |
##   30 |  0.02223     1.91 |
##   40 |  0.02001     1.72 |
##   50 |  0.01783     1.53 |
##   60 |  0.01717     1.47 |
##   70 |  0.01663     1.43 |
## [1] "piat Training rf at 2016-01-22 23:52:12 took 1.6 secs"
## [1] "trn-City Center-piat regressors:5171  predictors:22   adjrat:1.00427"
## [1] "   SSres:19.32317  SStot:6024.97351  mean(y):71.89557"
## [1] "trn-City Center-piat R2 test:0.99679   Adjusted R2 test0.99678"
## [1] "tst-City Center-piat regressors:391  predictors:22   adjrat:1.05978"
## [1] "   SSres:296.16763  SStot:637.05591  mean(y):69.74730"
## [1] "tst-City Center-piat R2 test:0.53510   Adjusted R2 test0.50731"
## [1] "Value range min:0.2500  max:0.2500"

OCC (Occpancy Settings)

OCC Prediction

print(tset$occ$overviewplot)

print(tset$occ$detailplot)
## NULL

ERG (Total Energy Consumed by Building)

ERG Prediction

print(tset$erg$overviewplot)

print(tset$erg$detailplot)

IAT (Mean Delta Internal Air Temp) - Depreciated

# Reduce to only 3 vars, temp.f, iat, and erg

print(tset$diat$overviewplot)

print(tset$diat$detailplot)

IAT (Mean Internal Air Temp)

# Reduce to only 3 vars, temp.f, iat, and erg

print(tset$iat$overviewplot)

print(tset$iat$detailplot)

Integrated Prediction

Integrated Prediction

# get_exdf3 <- function (rparms,rdf,slmfit,rffit) 
# {
#   erggran <- 100
#   if (mean(rdf$erg) < 1000) {
#     erggran <- 50
#   }
#   iatgran <- 0.5
#   tpfgran <- 5
#   quanlim <- c(0.02, 0.98)
#   erglim <- erggran * trunc(quantile(rdf$erg, quanlim)/erggran)
#   iatlim <- iatgran * trunc(quantile(rdf$iat, quanlim)/iatgran)
#   tpflim <- tpfgran * trunc(quantile(rdf$temp.f, quanlim)/tpfgran)
#   ergvals <- seq(erglim[[1]], erglim[[2]], erggran)
#   iatvals <- seq(iatlim[[1]], iatlim[[2]], iatgran)
#   tpfvals <- seq(tpflim[[1]], tpflim[[2]], tpfgran)
#   exdf <- expand.grid(erg = ergvals, iat = iatvals, temp.f = tpfvals)
#   hvaccolors <- rparms$hvaccolors
#   names(hvaccolors) <- rparms$hvaclevs
#   if (!is.null(slmfit)){
#     pmdf <- predict(slmfit, exdf, trace = T, type = "dataframe")
#     pmdf$pred.lm.diat <- pmdf$diat
#     pmdf$diat <- NULL
#     exdf <- merge(pmdf, exdf, c("erg", "iat", "temp.f"))
#   }
#   exdf$pred.diat <- predict(rffit, exdf)
#   exdf$segname <- factor(exdf$segname, rparms$hvaclevs)
#   exdf$iat.minus.oat <- exdf$iat - exdf$temp.f
#   exdf$mtemp <- -exdf$temp.f
#   exdf$ftemp <- as.factor(exdf$temp.f)
#   exdf$ftemp <- factor(exdf$ftemp, levels = rev(levels(exdf$ftemp)))
#   exdf$fiat <- as.factor(exdf$iat)
#   exdf$fiat <- factor(exdf$fiat, levels = rev(levels(exdf$fiat)))
#   exdf$imo <- trunc((exdf$iat.minus.oat + 5)/10) * 10
#   return(exdf)
# }

# do3dplot <- function(rparms,diatlst,ddf,mode,xlb,ylb,zlb,addActualPath=F,addPredPath=T){
# 
#   rdf <- diatlst$rdf
#   rffit <- diatlst$rffit
#   slmfit <- diatlst$slmfit
#   iatlims <- diatlst$iatlims
# 
#   diatlim <- c(-0.25,0.25)
#   iatrng <- c(68,77)
# 
#   exdf <- get_exdf3(rparms,rdf,slmfit,rffit)
#   exdf$colseg <- rparms$hvaccolors[exdf$segname]
#   
#   ddf$pred.iat.minus.oat <- ddf$pred.iat-ddf$temp.f
#   ddf$colseg <- rparms$hvaccolors[1]
#   
#   if (sum(ddf$iat>iatlims[1])>0 ){
#     ddf[ ddf$iat>iatlims[1],]$colseg <- rparms$hvaccolors[2]
#   }
#   if (sum(ddf$iat>iatlims[2])>0 ){
#     ddf[ddf$iat>iatlims[2] ,]$colseg <- rparms$hvaccolors[3]
#   }
# 
#   y <- exdf$pred.lm.diat
#   if (mode=="rf"){
#     y <- exdf$pred.diat
#   }
#   plot3d(exdf$erg,y,exdf$iat,col=exdf$colseg,xlab=xlb,ylab=ylb,zlab=zlb)
#   if (addPredPath){
#     lines3d(ddf$pred.erg,ddf$pred.cas.diat,ddf$iat,col=ddf$colseg,add=T)
#   }
#   if (addActualPath){
#     lines3d(ddf$orig.cas.erg,ddf$orig.cas.diat,ddf$orig.cas.iat,col="yellow",add=T)
#   }
# 
#   # purple floor geometry
#   p3 <- par3d()
#   ergmin  <- p3$bbox[1]+10
#   ergmax  <- p3$bbox[2]-10
#   diatmin <- p3$bbox[3]+0.01
#   diatmax <- p3$bbox[4]-0.01
#   iatmin  <- p3$bbox[5]+0.1
#   iatmax  <- p3$bbox[6]-0.1
#   
#   zipdf <- data.frame(x=c(ergmin,ergmin,ergmax,ergmax,ergmin),
#                       y=c(0,0,0,0,0),
#                       z=c(iatmin,iatmax,iatmax,iatmin,iatmin))
#   polygon3d(zipdf$x,zipdf$y,zipdf$z,coord=c(1,3),alpha=0.5,color="purple",add=T)
# }



# mergeByQhr<- function(cname,df,df2){
#   ddf2 <-  df2[,match(c("qhr",cname),names(df2))]
#   rdf <- merge(df,ddf2,by="qhr")
#   return(rdf)
# }
# 
# mergeDfsByQhr <- function(df1,df2,df3){
#   df <- df1
#   sapply( names(df2), function(x){ if( is.null(df[[x]])){ df <<- mergeByQhr(x,df,df2) } } )
#   sapply( names(df3), function(x){ if( is.null(df[[x]])){ df <<- mergeByQhr(x,df,df3) } } )
#   return(df)
# } 

# occcontrol <- function (date,occpred,preheat){
#   hh <- hour(date)
#   mi <- minute(date)
#   hhf <- hh + mi/60
#   lolim <- preheat$start-preheat$hours
#   hilim <- preheat$start
#   override <- lolim<hhf & hhf<=hilim
# #   if (override){
# #     print(sprintf("hh:%d mi:%d hhf:%.2f   ph.hours:%.2f lolim:%.2f hilim:%.2f  ovr:%s",hh,mi,hhf,preheat$hours,lolim,hilim,override))
# #   }
#   
#   occval <- ifelse( override,preheat$level,occpred )
#   rv <- list()
#   rv$occval <- occval
#   rv$override <- override
#   return(rv)
# }


# cascadeModels <- function(rparms,occrf,ergrf,diatrf,iatrf,indf,iatlims=NULL,trace=F,preheat){
#   sstime <- rparms$sitime
#   eetime <- rparms$eitime
# 
#   # 
#   indf$occ <- as.numeric(as.character(indf$occ))
#   casdf <- indf[ sstime<=indf$time & indf$time<=eetime, ]
#   #  casdf[["pred1.occ"]] <- predict(occrf,casdf)
#   #  casdf[["pred1.erg"]] <- predict(ergrf,casdf)
#   #  casdf[["pred1.diat"]] <- predict(diatrf,casdf)
#   casdf[["pred.cas.occ"]] <- NA 
#   casdf[["pred.cas.erg"]] <- NA 
#   casdf[["pred.cas.diat"]] <- NA 
#   casdf[["pred.cas.iat"]] <- NA 
#   casdf[["pred.iat"]] <- NA
#   if (!is.null(iatlims)){
#     casdf[["iatseg"]] <- "heating"
#     #print(sprintf("iatlims:%.1f %.1f",iatlims[1],iatlims[2]))
#   }
#   casdf[["orig.cas.occ"]] <- casdf[["occ"]]
#   casdf[["orig.cas.erg"]] <- casdf[["erg"]]
#   casdf[["orig.cas.diat"]] <- casdf[["diat"]]
#   casdf[["orig.cas.iat"]] <- casdf[["iat"]]
#   casdf[1,"pred.iat"] <- casdf[1,"iat"]
#   iend <- nrow(casdf)
#   occovcnt <- 0
#   for( i in 2:iend ){
#     predoccval  <- as.numeric(as.character(predict(occrf,casdf[i-1,])))
#     occctrl <- occcontrol(casdf[i,"time"],predoccval,preheat)
#     casdf[i,"pred.cas.occ"] <- occcontrol(casdf[i,"time"],predoccval,preheat)$occval
#     if (occctrl$override){
#       occovcnt <- occovcnt+1
#     }
# 
#   #  casdf[i,"pred.cas.occ"]  <- as.numeric(casdf[i,"occ"])   # Add this for an OCC Lock
#     
#     casdf[i,"occ"] <- as.numeric(as.character(casdf[[i,"pred.cas.occ"]]))
#   #  browser()
#     casdf[i,"pred.cas.erg"]  <- predict(ergrf,casdf[i-1,])
# 
#     # casdf[i,"pred.cas.erg"]  <- casdf[i,"erg"]   # Add this for an ERG Lock
#     casdf[i,"erg"] <- casdf[i,"pred.cas.erg"]   
#     casdf[i,"pred.cas.diat"] <- predict(diatrf,casdf[i-1,])
#     casdf[i,"diat"] <- casdf[i,"pred.cas.diat"]
#     casdf[i-1,"liat"] <- casdf[max(1,i-2),"iat"]
#    # casdf[i-1,"diat"] <- casdf[max(1,i-2),"iat"]-casdf[max(1,i-3),"iat"]
#     casdf[i,"pred.new.iat"] <- predict(iatrf,casdf[i-1,])
#     if (i<iend){
#       casdf[i,"pred.cas.iat"] <- max(64,min(80,casdf[i-1,"iat"] + casdf[i,"diat"]))
#       casdf[i,"iat"] <- casdf[i,"pred.cas.iat"]
#       casdf[i,"iat"] <- casdf[i,"pred.new.iat"]
#       #      casdf[i+1,"iat"] <- casdf[i,"iat"] + casdf[i,"diat"]
#       if (!is.null(iatlims)){
#         if (casdf[i,"pred.cas.iat"]>iatlims[2]){
#           casdf[i,"iatseg"] <- "cooling"
#         } else if(casdf[i,"pred.cas.iat"]>iatlims[1]){
#           casdf[i,"iatseg"] <- "drift"
#         } 
#       }
#     }
#     casdf[i,"pred.iat"] <- casdf[i-1,"pred.iat"] + casdf[i,"orig.cas.diat"]
#     
# 
#     
#     if(trace){
#       msg <- sprintf("t:%d - pred.cas.iat_t:%.1f orig.cas.iat_t:%.1f erg_t:%.1f oat_t:%.1f ->  diat_t:%.2f iat.new_t:%.2f %s",
#                       i,casdf[i,"pred.cas.iat"],casdf[i,"orig.cas.iat"],
#                         casdf[i,"erg"],casdf[i,"temp.f"], casdf[i,"diat"],
#                         casdf[i,"pred.new.iat"],
#                         casdf[i,"iatseg"]
#                      )
#       print(msg)
#     }
#   }
#   
# #  rparms$usagecostkwh <- 0.06
# #  rparms$demandcostkw <- 6.00  
#   
#   
#   peakerg <- max(casdf[["pred.cas.erg"]],na.rm=T )
#   sumerg  <- sum(casdf[["pred.cas.erg"]],na.rm=T)/4
#   avgiat <- mean(casdf[["pred.cas.iat"]],na.rm=T)
#   avgocc <- mean(casdf[["pred.cas.occ"]],na.rm=T)
#   dc <- peakerg*rparms$demandcostkw
#   uc <- sumerg*rparms$usagecostkwh
#   tc <- dc+uc
#   
#   msg <- sprintf("shr:%.1f hr:%.2f lv:%.2f peakE:%.1f sumE:%.1f dc:%.2f uc:%.2f tc:%.2f occov:%d avgT:%.3f",
#                   preheat$start,preheat$hours,preheat$level,
#                   peakerg,sumerg,dc,uc,tc,
#                   occovcnt,avgiat)
#   print(msg)
#   
#   rv <- list()
#   rv$casdf <- casdf
#   rv$peakerg <- peakerg
#   rv$sumerg <- sumerg
#   rv$dc <- dc
#   rv$uc <-  uc
#   rv$tc <-  tc
#   rv$avgocc <- avgocc
#   rv$avgiat <- avgiat
#   rv$preheat <- preheat
#   rv$occovcnt <- occovcnt
#   rv$sstime <- sstime
#   rv$eetime <- eetime
#   return(rv)
# }



# doOnePlot <- function(s1.x, s1.y, s1.lab, s1.iatseg,
#                     s2.x, s2.y, s2.lab, s2.color,
#                     ph.h, ph.l,
#                    maintit,xlab,ylab,lines=F,tdf=NULL,ybreaks=NULL)
# {
#     q1df <- data.frame(x = s1.x, y = s1.y, lab=s1.iatseg,ph.hours=ph.h,ph.level=ph.l)
#     q2df <- data.frame(x = s2.x, y = s2.y, lab=s2.lab,   ph.hours=ph.h,ph.level=ph.l)
# 
#     qdf <- rbind(q1df,q2df)
#     qdf <- qdf[ order(qdf$x), ]
# 
#     # for now disconnect these labels
#     qdf$lab <- as.character(qdf$lab)
#     idx <- qdf$lab=="heating" | qdf$lab=="cooling"
#     if (sum(idx)>0){
#       qdf[ idx,]$lab <- "drift"
#     }
# 
#     qcolors        <- c("darkblue","darkblue","darkblue",s2.color,"darkred","darkblue","darkgreen")
#     names(qcolors) <- c("heating","drift","cooling",s2.lab,"high","norm","low")
#     
#     gp <- ggplot(qdf, aes(x,y,color=lab) ) +
#       
#       geom_point(alpha = I(0.5),na.rm=T) +
#       
#       scale_color_manual(values = qcolors) +
#       labs(title=maintit,y=ylab,x=xlab) + 
#       theme_bw() + 
#       theme(axis.text.x = element_text(angle = 30, hjust = 1)) + 
#       facet_grid( ph.hours ~ ph.level )
#     if (lines){
#       gp <- gp + geom_line(alpha = I(0.5),na.rm=T)
#     }
#     if (!is.null(tdf)){
#       #print(tdf)
#       gp <- gp + geom_text(data=tdf,aes(x=x,y=y,label=label,color=color,hjust=hjust))
#       ggp <<- gp
#     }
#     if (!is.null(ybreaks)){
#       gp <- gp + scale_y_continuous(breaks=ybreaks)
#     }
#     return(gp)
# }
# 
# doPlots <- function(ddf,odf,edf,tdf,rparms,mode){
#   
#   g1 <- doOnePlot( ddf$time,ddf$pred.cas.occ,sprintf("pred %s occ",mode),ddf$iatseg,
#            ddf$time,ddf$orig.cas.occ,"act occ","gray80",ddf$ph.hours,ddf$ph.level,
#            sprintf("%s occ - pred %s vs. act",rparms$bld,mode),
#            "time","occ",lines=T,tdf=odf,ybreaks=c(0.25,0.5,0.75,1.0))  
#   
#   g2 <- doOnePlot(ddf$time,ddf$pred.cas.erg,sprintf("pred %s %s",mode,rparms$ergname),ddf$iatseg,
#           ddf$time,ddf$orig.cas.erg,"act erg","gray80",ddf$ph.hours,ddf$ph.level,
#           sprintf("%s %s - pred %s vs. act", rparms$bld,rparms$ergname,mode),
#           "time",rparms$ergname,lines=T,tdf=edf)
#   g3 <- NULL
# #   g3 <- doOnePlot(ddf$time,ddf$pred.cas.diat,sprintf("pred %s diat",mode),ddf$iatseg,
# #           ddf$time,ddf$orig.cas.diat,"act diat","gray80",ddf$ph.hours,ddf$ph.level,
# #           sprintf("%s diat pred %s vs. act",rparms$bld,mode),
# #           "time","delta temp",lines=T)  
#   
#   g4 <- doOnePlot(ddf$time,ddf$pred.cas.iat,sprintf("pred %s iat",mode),ddf$iatseg,
#           ddf$time,ddf$orig.cas.iat,"act iat","gray80",ddf$ph.hours,ddf$ph.level,
#           sprintf("%s iat pred %s vs. act",rparms$bld,mode),
#           "time","indoor air temp",lines=T,tdf=tdf)  
#   rv <- list()
#   rv$occ <- g1
#   rv$erg <- g2
#   rv$iat <- g3
#   return(rv)
# }

# combineCosts <- function(cdf,rv){
#   ddf <- data.frame(peakerg=rv$peakerg,sumerg=rv$sumerg)
#   ddf$dc <- rv$dc
#   ddf$uc <-  rv$uc
#   ddf$tc <-  rv$tc
#   ddf$avgiat <- rv$avgiat
#   ddf$avgocc <- rv$avgocc
#   ddf$ph.start <- rv$preheat$start
#   ddf$ph.hours <- rv$preheat$hours
#   ddf$ph.level <- rv$preheat$level
#   ddf$sstime <- rv$sstime
#   ddf$eetime <- rv$eetime
#   
#   if (is.null(cdf)){
#     cdf <- ddf
#   } else {
#     cdf <- rbind(cdf,ddf)
#   }
#   rownames(cdf) <- NULL
#   return(cdf)
# }

# combineData <- function(adf,rv){
#   ddf <- rv$casdf
#   ddf$ph.start <- rv$preheat$start
#   ddf$ph.hours <- rv$preheat$hours
#   ddf$ph.level <- rv$preheat$level
#   ddf <- ddf[ order(ddf$time), ]
#   rownames(ddf) <- NULL
#   if (is.null(adf)){
#     adf <- ddf
#   } else {
#     adf <- rbind(adf,ddf)
#   }
#   rownames(adf) <- NULL
#   return(adf)
# }

Random Forest

# ergCdfTotdf <- function(cdf){
# 
#   # Line 1  
#   t1df <- data.frame(x=cdf$eetime,y=max(cdf$peakerg)*1.04)
#   t1df$label <- sprintf("d:%.0f u:%.0f t: %.0f",cdf$dc,cdf$uc,cdf$tc)
#   t1df$hjust <- 1
#   t1df$size <- 2
#   t1df$color <- "norm"
#   t1df$ph.hours <- cdf$ph.hours
#   t1df$ph.level <- cdf$ph.level
#   t1df$tc <- cdf$tc
#   
#   idx <- which(t1df$tc==max(t1df$tc))
#   t1df[idx,]$color <- "high"
#   idx <- which(t1df$tc==min(t1df$tc))
#   t1df[idx,]$color <- "low"
#   t1df$tc <- NULL
# 
#   # Line 2  
#   t2df <- data.frame(x=cdf$eetime,y=max(cdf$peakerg)*0.99)
#   t2df$label <- sprintf("pk:%.0f ",cdf$peakerg)
#   t2df$hjust <- 1
#   t2df$size <- 2
#   t2df$color <- "norm"
#   t2df$ph.hours <- cdf$ph.hours
#   t2df$ph.level <- cdf$ph.level
#   t2df$peakerg <- cdf$peakerg
#   
#   idx <- which(t2df$peakerg==max(t2df$peakerg))
#   t2df[idx,]$color <- "high"
#   idx <- which(t2df$peakerg==min(t2df$peakerg))
#   t2df[idx,]$color <- "low"
#   t2df$peakerg <- NULL
# 
#   # Line 2  
#   t3df <- data.frame(x=cdf$eetime,y=max(cdf$peakerg)*0.94)
#   t3df$label <- sprintf("sm:%.0f ",cdf$sumerg)
#   t3df$hjust <- 1
#   t3df$size <- 2
#   t3df$color <- "norm"
#   t3df$ph.hours <- cdf$ph.hours
#   t3df$ph.level <- cdf$ph.level
#   t3df$sumerg <- cdf$sumerg
#   
#   idx <- which(t3df$sumerg==max(t3df$sumerg))
#   t3df[idx,]$color <- "high"
#   idx <- which(t3df$sumerg==min(t3df$sumerg))
#   t3df[idx,]$color <- "low"
#   t3df$sumerg <- NULL
#   
#     
#   tdf <- rbind(t1df,t2df,t3df)
#   return(tdf)
# }

# iatCdfTotdf <- function(cdf){
# 
#   # Line 1  
#   dy <- (72-69)
#   t1df <- data.frame(x=cdf$eetime,y=(72.5-69)*1.05 + 69)
#   t1df$label <- sprintf("avg occ:%.3f iat:%.3f",cdf$avgocc,cdf$avgiat)
#   t1df$hjust <- 1
#   t1df$size <- 2
#   t1df$color <- "norm"
#   t1df$ph.hours <- cdf$ph.hours
#   t1df$ph.level <- cdf$ph.level
#   t1df$avgiat <- cdf$avgiat
#   
#   idx <- which(t1df$avgiat==max(t1df$avgiat))
#   t1df[idx,]$color <- "high"
#   idx <- which(t1df$avgiat==min(t1df$avgiat))
#   t1df[idx,]$color <- "low"
#   t1df$avgiat <- NULL
#   
#     
#   tdf <- rbind(t1df)
#   return(tdf)
# }

# occCdfTotdf <- function(cdf){
# 
#   # Line 1  
#   t1df <- data.frame(x=cdf$eetime,y=1.0*1.12)
#   t1df$label <- sprintf("avg occ:%.3f iat:%.3f",cdf$avgocc,cdf$avgiat)
#   t1df$hjust <- 1
#   t1df$size <- 2
#   t1df$color <- "norm"
#   t1df$ph.hours <- cdf$ph.hours
#   t1df$ph.level <- cdf$ph.level
#   t1df$avgocc <- cdf$avgocc
#   
#   idx <- which(t1df$avgocc==max(t1df$avgocc))
#   t1df[idx,]$color <- "high"
#   idx <- which(t1df$avgocc==min(t1df$avgocc))
#   t1df[idx,]$color <- "low"
#   t1df$avgocc <- NULL
#   
#     
#   tdf <- rbind(t1df)
#   return(tdf)
# }
# 
# runSenarios <- function(starthr,hrs,lvs,occlst,erglst,diatlst,iiatlst){
#   adf <- NULL
#   cdf <- NULL
#   tdf <- NULL
#   
#   mdf <- mergeDfsByQhr(occlst$rdf,erglst$rdf,iiatlst$rdf)
#   
#   
#   preheat <- list()
#   preheat$start <- starthr
#   preheat$hours <- 4
#   preheat$level <- 0.5
#   
#   for (hour in hrs){
#     for (level in lvs){
#       preheat$hours <- hour
#       preheat$level <- level
#       rv <- cascadeModels(rparms,occlst$rf,erglst$rf,diatlst$rf,iiatlst$rf,mdf,
#                           diatlst$iatlims,preheat=preheat)
#       
#       adf <- combineData(adf,rv)
#       cdf <- combineCosts(cdf,rv)
#     }
#   }
#   rv <- list()
#   rv$cdf <- cdf
#   rv$adf <- adf
#   rv$odf <- occCdfTotdf(cdf)
#   rv$edf <- ergCdfTotdf(cdf)
#   rv$tdf <- iatCdfTotdf(cdf)
#   rv$plts <- doPlots(rv$adf,rv$odf,rv$edf,rv$tdf,rparms,"rf")
#   return(rv)
# }


starthr <- 7  
hrs <- c(2.0,2.25,2.5,2.75,3.0)
lvs <- c(0.6,0.8,1.0)
runs <- runSenarios(starthr,hrs,lvs,tset$occ,tset$erg,tset$diat,tset$iat)
## [1] "shr:7.0 hr:2.00 lv:0.60 peakE:2774.7 sumE:41238.4 dc:10488.19 uc:3235.86 tc:13724.05 occov:8 avgT:71.112"
## [1] "shr:7.0 hr:2.00 lv:0.80 peakE:2543.5 sumE:41200.7 dc:9614.24 uc:3232.89 tc:12847.14 occov:8 avgT:71.188"
## [1] "shr:7.0 hr:2.00 lv:1.00 peakE:2439.3 sumE:41932.7 dc:9220.37 uc:3290.33 tc:12510.70 occov:8 avgT:71.252"
## [1] "shr:7.0 hr:2.25 lv:0.60 peakE:2807.3 sumE:41326.5 dc:10611.43 uc:3242.76 tc:13854.19 occov:9 avgT:71.102"
## [1] "shr:7.0 hr:2.25 lv:0.80 peakE:2522.8 sumE:41286.8 dc:9536.12 uc:3239.65 tc:12775.77 occov:9 avgT:71.199"
## [1] "shr:7.0 hr:2.25 lv:1.00 peakE:2431.9 sumE:42108.4 dc:9192.76 uc:3304.12 tc:12496.87 occov:9 avgT:71.262"
## [1] "shr:7.0 hr:2.50 lv:0.60 peakE:2774.7 sumE:41389.7 dc:10488.19 uc:3247.73 tc:13735.92 occov:10 avgT:71.110"
## [1] "shr:7.0 hr:2.50 lv:0.80 peakE:2522.6 sumE:41388.3 dc:9535.30 uc:3247.62 tc:12782.92 occov:10 avgT:71.208"
## [1] "shr:7.0 hr:2.50 lv:1.00 peakE:2431.9 sumE:42279.0 dc:9192.76 uc:3317.51 tc:12510.27 occov:10 avgT:71.279"
## [1] "shr:7.0 hr:2.75 lv:0.60 peakE:2795.7 sumE:41478.5 dc:10567.66 uc:3254.69 tc:13822.35 occov:11 avgT:71.101"
## [1] "shr:7.0 hr:2.75 lv:0.80 peakE:2477.0 sumE:41462.4 dc:9363.24 uc:3253.43 tc:12616.67 occov:11 avgT:71.218"
## [1] "shr:7.0 hr:2.75 lv:1.00 peakE:2432.9 sumE:42449.7 dc:9196.32 uc:3330.90 tc:12527.23 occov:11 avgT:71.289"
## [1] "shr:7.0 hr:3.00 lv:0.60 peakE:2795.7 sumE:41546.8 dc:10567.66 uc:3260.05 tc:13827.71 occov:12 avgT:71.104"
## [1] "shr:7.0 hr:3.00 lv:0.80 peakE:2474.4 sumE:41555.1 dc:9353.42 uc:3260.70 tc:12614.12 occov:12 avgT:71.229"
## [1] "shr:7.0 hr:3.00 lv:1.00 peakE:2432.9 sumE:42590.2 dc:9196.32 uc:3341.92 tc:12538.25 occov:12 avgT:71.303"
print(runs$plts$occ)

print(runs$plts$erg)

print(runs$plts$iat)
## NULL
getElapSecs <- function (starttime){
  as.numeric((Sys.time()-starttime)[1],units="secs")
}
print(sprintf("%s created on %s took %.1f secs",ver$string,ver$startfmttime,getElapSecs(ver$starttime)))
## [1] "Version 0.32 created on 22 Jan 2016 - 23:51:35 took 110.0 secs"